#!/bin/bash
# Wiozen Key Tool for macOS
# Configures Claude Desktop & Claude Code for WioZen Gateway (api.wiozen.com)

GW_URL="https://api.wiozen.com"
UUID="7c4a2f91-3b8e-4d6a-9f21-a1b2c3d4e5f6"
RESOURCES_DIR="$(cd "$(dirname "$0")/../Resources" && pwd)"
ICON_PATH="$RESOURCES_DIR/app.icns"

CLAUDE_3P_DIR="$HOME/Library/Application Support/Claude-3p"
CLAUDE_1P_DIR="$HOME/Library/Application Support/Claude"
CLAUDE_CODE_DIR="$HOME/.claude"

# Check existing key
CURRENT_KEY=""
if [ -f "$CLAUDE_3P_DIR/configLibrary/$UUID.json" ]; then
    CURRENT_KEY=$(grep -o '"inferenceGatewayApiKey": *"[^"]*"' "$CLAUDE_3P_DIR/configLibrary/$UUID.json" | cut -d'"' -f4)
elif [ -f "$CLAUDE_CODE_DIR/settings.json" ]; then
    CURRENT_KEY=$(grep -o '"ANTHROPIC_AUTH_TOKEN": *"[^"]*"' "$CLAUDE_CODE_DIR/settings.json" | cut -d'"' -f4)
fi

PROMPT_TEXT="Claude Desktop ve Claude Code için Wiozen API Anahtarınızı (sk-gw-...) girin:"
if [ -n "$CURRENT_KEY" ]; then
    PROMPT_TEXT="Mevcut API Anahtarı yüklendi. Güncellemek için yeni anahtarı girebilirsiniz:"
fi

# Show Native AppleScript Input Dialog
RESP=$(osascript -e "
try
    set dialogResult to display dialog \"$PROMPT_TEXT\" default answer \"$CURRENT_KEY\" with title \"Wiozen Key Tool\" with icon POSIX file \"$ICON_PATH\" buttons {\"İptal\", \"Sıfırla\", \"Uygula\"} default button \"Uygula\"
    set btn to button returned of dialogResult
    set txt to text returned of dialogResult
    return btn & \"|\" & txt
on error number -128
    return \"İptal|\"
end try
")

BTN=$(echo "$RESP" | cut -d'|' -f1)
API_KEY=$(echo "$RESP" | cut -d'|' -f2 | xargs)

if [ "$BTN" = "İptal" ]; then
    exit 0
fi

if [ "$BTN" = "Sıfırla" ]; then
    # Reset configuration
    killall Claude 2>/dev/null
    rm -f "$CLAUDE_3P_DIR/configLibrary/$UUID.json"
    rm -f "$CLAUDE_3P_DIR/configLibrary/wiozen.json"
    if [ -f "$CLAUDE_3P_DIR/configLibrary/_meta.json" ]; then
        echo '{"appliedId":"","entries":[]}' > "$CLAUDE_3P_DIR/configLibrary/_meta.json"
    fi
    if [ -f "$CLAUDE_CODE_DIR/settings.json" ]; then
        # remove anthropic env
        sed -i '' '/ANTHROPIC_/d' "$CLAUDE_CODE_DIR/settings.json" 2>/dev/null
    fi
    osascript -e 'display dialog "Wiozen Gateway ayarları başarıyla sıfırlandı." with title "Wiozen Key Tool" buttons {"Tamam"} default button "Tamam"'
    exit 0
fi

if [ -z "$API_KEY" ]; then
    osascript -e 'display dialog "API Anahtarı boş bırakılamaz." with title "Hata" with icon stop buttons {"Tamam"} default button "Tamam"'
    exit 1
fi

# 1. Close Claude Desktop
killall Claude 2>/dev/null
sleep 0.5

# 2. Setup Claude-3p directories
mkdir -p "$CLAUDE_3P_DIR/configLibrary"
mkdir -p "$CLAUDE_1P_DIR/configLibrary"
mkdir -p "$CLAUDE_CODE_DIR"

# 3. Write Profile JSON (strictly wiozen-anthropic only)
cat <<EOF > "$CLAUDE_3P_DIR/configLibrary/$UUID.json"
{
  "inferenceProvider": "gateway",
  "inferenceGatewayBaseUrl": "$GW_URL",
  "inferenceGatewayApiKey": "$API_KEY",
  "inferenceGatewayAuthScheme": "x-api-key",
  "inferenceCredentialKind": "static",
  "modelDiscoveryEnabled": false,
  "inferenceModels": [
    {
      "name": "wiozen-anthropic"
    }
  ],
  "chatTabEnabled": true,
  "coworkTabEnabled": true,
  "isClaudeCodeForDesktopEnabled": true
}
EOF

# Copy for 1p folder and wiozen.json compatibility
cp "$CLAUDE_3P_DIR/configLibrary/$UUID.json" "$CLAUDE_3P_DIR/configLibrary/wiozen.json"
cp "$CLAUDE_3P_DIR/configLibrary/$UUID.json" "$CLAUDE_1P_DIR/configLibrary/$UUID.json"
cp "$CLAUDE_3P_DIR/configLibrary/$UUID.json" "$CLAUDE_1P_DIR/configLibrary/wiozen.json"

# 4. Write _meta.json
cat <<EOF > "$CLAUDE_3P_DIR/configLibrary/_meta.json"
{
  "appliedId": "$UUID",
  "entries": [
    {
      "id": "$UUID",
      "name": "Claude Desktop + Claude Code (VS Code/Cursor)"
    }
  ]
}
EOF
cp "$CLAUDE_3P_DIR/configLibrary/_meta.json" "$CLAUDE_1P_DIR/configLibrary/_meta.json"

# 5. Write developer_settings.json
echo '{"allowDevTools": true}' > "$CLAUDE_3P_DIR/developer_settings.json"
echo '{"allowDevTools": true}' > "$CLAUDE_1P_DIR/developer_settings.json"

# 6. Write .claude-key-tool.json
cat <<EOF > "$CLAUDE_3P_DIR/.claude-key-tool.json"
{
  "version": "1.2.2",
  "key": "$API_KEY",
  "gateway": "$GW_URL"
}
EOF
cp "$CLAUDE_3P_DIR/.claude-key-tool.json" "$CLAUDE_1P_DIR/.claude-key-tool.json"

# 7. Write deploymentMode to claude_desktop_config.json
patch_config() {
    CFG_FILE="$1"
    if [ ! -f "$CFG_FILE" ]; then
        echo '{"deploymentMode": "3p"}' > "$CFG_FILE"
    else
        if ! grep -q '"deploymentMode"' "$CFG_FILE"; then
            sed -i '' 's/{/{\
  "deploymentMode": "3p",/' "$CFG_FILE" 2>/dev/null || echo '{"deploymentMode": "3p"}' > "$CFG_FILE"
        fi
    fi
}
patch_config "$CLAUDE_3P_DIR/claude_desktop_config.json"
patch_config "$CLAUDE_1P_DIR/claude_desktop_config.json"

# 8. Configure Claude Code CLI (~/.claude/settings.json)
SETTINGS_FILE="$CLAUDE_CODE_DIR/settings.json"
if [ ! -f "$SETTINGS_FILE" ]; then
    echo "{}" > "$SETTINGS_FILE"
fi

cat <<EOF > "$SETTINGS_FILE"
{
  "env": {
    "ANTHROPIC_BASE_URL": "$GW_URL",
    "ANTHROPIC_AUTH_TOKEN": "$API_KEY",
    "ANTHROPIC_MODEL": "wiozen-anthropic",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "wiozen-anthropic",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "wiozen-anthropic",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "wiozen-anthropic",
    "ANTHROPIC_SMALL_FAST_MODEL": "wiozen-anthropic"
  }
}
EOF

# Clean ~/.claude.json
if [ -f "$HOME/.claude.json" ]; then
    sed -i '' '/primaryApiKey/d' "$HOME/.claude.json" 2>/dev/null
    sed -i '' '/customApiKeyResponses/d' "$HOME/.claude.json" 2>/dev/null
fi

# Success Dialog with Claude Launch Option
LAUNCH_RESP=$(osascript -e "
display dialog \"Wiozen Gateway bağlantısı başarıyla uygulandı!\\n\\nModel: wiozen-anthropic\\nGateway: api.wiozen.com\\n\\nClaude Desktop şimdi başlatılsın mı?\" with title \"Wiozen Key Tool\" buttons {\"Kapat\", \"Claude'u Başlat\"} default button \"Claude'u Başlat\"
")

if echo "$LAUNCH_RESP" | grep -q "Claude'u Başlat"; then
    open -a Claude 2>/dev/null || open -a "Claude Desktop" 2>/dev/null || true
fi

exit 0
